#pragma once
#include "type.h"
using namespace std;
class AtomicType :public Type{
	
	
public:
	//Type overides
		bool isAtomicType() const {return true;};	


public:
	//Token overides
	Token::pointer normalized() const;
	Token::pointer applyArgument(Token::const_reference)  const;
	Token::pointer clone() const;
	bool isReducible() const{return false;};	   
	Token::pointer replaceAll(Token::const_reference, Token::const_reference) const;

public:
	AtomicType(const string& ="");
	AtomicType(const AtomicType&);
	virtual ~AtomicType();

public:
	bool hasSubType(Type::const_reference Ty) const  {return operator==(Ty);};
		
	};
